package prog040;

import java.util.Scanner;

public class Prog040 {
	private static double matriz[][];
	private static Scanner ler;
	
	public static void main(String[] args) {
		ler = new Scanner(System.in);
		
		System.out.println("Insira um N:");
		matriz = geraMatriz(ler.nextInt());
		imprimeMatriz();
		System.out.println("-----");
		pecorreMatriz();
		imprimeMatriz();
	}
	
	private static double[][] geraMatriz(int n){
		double matriz[][] = new double[n][n];
		double valor;
		
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				valor = (double) geraValor();
				matriz[i][j] = valor;
			}
		}
		return matriz;
	}
	
	private static int geraValor(){
		int valor = (int) (Math.random() * 10);
		return valor;
	}
	
	private static void imprimeMatriz(){
		int n = matriz[0].length;
		
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){			
				System.out.print((j == 0 ? "|":"")+" "+matriz[i][j]+" "+(j == (n-1) ? "|":""));
			}
			System.out.print("\n");
		}
		System.out.println("\n");
	}
	
	private static void pecorreMatriz(){
		int n = matriz[0].length;
		boolean aux = false;

		while(!aux){
			for(int i=1;i<n;i++){
				aux = true;
				for (int j = 0; j < i; j++) {
					if(matriz[i][j] != 0){
						zeraElemento(i, j);
						imprimeMatriz();
						aux = false;
					}
				}
			}
		}
	}
	
	//ERRADO:
	private static void zeraElemento(int i, int j){
		int n = matriz[0].length;
		
		double elementoPai = matriz[0][j];
		double elementoFilho = matriz[i][j];
		
		//elementoPai * x + elementoFilho = 0
		double zerador = (elementoFilho * -1)/elementoPai;

		for(int aux=0; aux<n;aux++){
			matriz[i][aux] = zerador * matriz[0][aux] + matriz[i][aux];
		}
	}

}
